草庐IT

c++ - Lua C++ 表迭代

全部标签

c++ - STL 可迭代对象的迭代器循环宏

概念因此,我试图定义一个宏来简化以下代码:for(vector::iteratoriter=iterable.begin();iter!=iterable.end();iter++)和for(map::iteratoriter=iterable.begin();iter!=iterable.end();iter++)等等现有工作到目前为止,我有#defineevery(iter,iterable)::iteratoriter=iterable.begin();iter!=iterable.end();iter++for(vectorevery(iter,iterable))但我想进一步

c++ - 如何为 STL 类容器提供公共(public) const 迭代器和私有(private)非 const 迭代器?

我有一个包含std::list的类,我希望为const_iterator提供publicbegin()和end(),为普通迭代器提供privatebegin()和end()。但是,编译器看到私有(private)版本并提示它是私有(private)的,而不是使用公共(public)const版本。我知道C++不会重载返回类型(在本例中为const_iterator和迭代器),因此它选择了非常量版本,因为我的对象不是const。如果没有在调用begin()之前将我的对象转换为const或者没有重载名称begin是否有办法实现这一点?我认为这是一个已知的模式,人们以前已经解决过,并且想效仿

c++ - 迭代器后继

我想用另一个迭代器(同类)的后继初始化一个迭代器(任意类型)。以下代码适用于随机访问迭代器,但不适用于前向或双向迭代器:Iteratori=j+1;一个简单的解决方法是:Iteratori=j;++i;但这不能用作for循环的init-stament。我可以使用如下函数模板:templateIteratorsucc(Iteratorit){return++it;}然后像这样使用它:Iteratori=succ(j);STL或Boost中是否有类似的东西,或者是否有我不知道的更好的解决方案? 最佳答案 我认为您正在寻找nextinBo

c++ - 如何使用两个函数,一个返回迭代器,另一个返回 const_iterator

所以我有一个名为find的函数,它有两个版本:templatetypenamebtree::iteratorbtree::find(constT&elem){//Implementation}另一个是const_iterator版本:templatetypenamebtree::const_iteratorbtree::find(constT&elem)const{//Implementation}在我做的时候在我的测试文件中btree::iteratorit=myTree.find('M');一切正常,但是当我使用const_iterator版本时:btree::const_iter

c++ - 获取迭代器范围的每个第 n 个元素

是否有包装另一个迭代器并仅给出它的每个第n个元素的迭代器的任何标准实现(意味着stdlib或boost)?我最初认为这可以通过合适的谓词和boost::filter_iterator来实现,但是谓词只获取值而不是基础迭代器,所以它无法告诉起点的距离。编辑提供更多信息:迭代器应与std::transform或std::copy等函数兼容。所以它应该像stdlib迭代器一样使用。类似问题:C++/STL:std::transformwithgivenstride?Non-unititeratorstridewithnon-randomaccessiterators

c++ - std::transform 中的输入迭代器和输出迭代器来自同一个容器是否安全?

在thispost其中一个答案建议以这种方式更改std::string大小写:std::stringstr="HelloWorld";std::transform(str.begin(),str.end(),str.begin(),::toupper);我已经使用过它,到目前为止它在VisualStudio2010中有效。但是标准是否保证它始终有效?我担心的是,我可以想象写入输出迭代器(第三个参数)可能会使输入迭代器(参数一和二)无效的实现的可能性。那么综上所述,上述方法是否安全、便携? 最佳答案 是的,这保证是安全的(只要操作本身

c++ - DFID(深度优先迭代深化)与 IDA*(迭代深化 A*)

我想知道这两种算法的优缺点是什么。我想写AddEmUpC++已解决,但我不确定应该使用哪种(IDA或DFID)算法。我找到的最好的文章是thisone,但它似乎太旧了-'93。还有更新的吗我认为IDA*会更好,但是..?还有其他想法吗?任何想法和信息都会有所帮助。谢谢!(:编辑:一些关于IDA*的好文章和对算法的很好解释?EDIT2:或者该游戏的一些很好的启发式函数?我不知道怎么想一些:/ 最佳答案 Russel和Norvig的书是关于这些算法的极好引用,我会给larsmans一个虚拟的击掌来表彰它的建议;但是我不同意IDA*在任何

C++ 模板迭代器错误

我正在复习我在2006年作为一名本科生编写的一些代码。它是一个使用模板用C++编写的简单遗传算法库。它曾经在2006年使用visualstudio编码时工作,但现在当我尝试在xcode中运行它时出现编译错误。这个函数给我错误:friendbooloperator==(constTSPGenome&t1,constTSPGenome&t2){//loopthrougheachinteratorandchecktoseeifthetwogenomeshavethesamevaluesif(t1.genome_vec->size()!=t2.genome_vec->size())return

c++ - 强制 foreach 使用 const 迭代器

我有一个自定义容器类,它实现了cbegin()和cend()函数。然后我在foreach循环中使用它,但它似乎需要begin()和end()成员函数,即使我尝试使用const修饰符:for(constautoval:container)像这样:for(autoconstval:container)像这样:for(constautoconstval:container)是否可以强制foreach使用常量c函数? 最佳答案 当然:让范围看起来像一个const范围:templateTconst&make_const(Tconst&argu

c++ - 在 C++ 中继续迭代,直到 gdb 中的特定迭代次数

我正在使用gdb-7.0.1,我想我在我的代码的某个部分检测到一个错误,它有一个for循环。for循环看起来像for(inti=0;i这里的end是一个非常大的整数。代码在第一次迭代时没有崩溃,似乎在迭代号end/2的某处崩溃。因为我想了解代码在迭代次数end/2时的行为,只需stepping和nexting来自i=0直到我到达这个迭代点,是不可行的。有没有办法告诉gdb继续执行for循环直到i得到值end/2然后等待用户手动单步执行迭代次数end/2?我在UbuntuLinux上使用gcc-4.5.2 最佳答案 这是关于condi